package com.ruoyi.generator.service;


import com.ruoyi.generator.entity.Contract;
import com.ruoyi.generator.mapper.ContractMapper;
import com.ruoyi.generator.mapper.ToolMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.util.List;

@Service
public class AnnualTaskService {

    private final ToolMapper toolMapper;

    @Autowired
    private ContractMapper ContractMapper;

    @Autowired
    public AnnualTaskService(ToolMapper toolMapper) {
        this.toolMapper = toolMapper;
    }

    // 每年1月1日零点执行
    @Scheduled(cron = "0 0 0 1 1 ?")
    public void executeAnnualTask() {
        // 调用 Mapper 方法执行 SQL 语句
        System.out.println("已经清零本年度完成产值");
        // 需要记录去年产值在进行清零
        toolMapper.ContractValueReset();
    }

    // 每月 1 号的 00:00:00 执行
    @Scheduled(cron = "0 0 0 1 * ?")
    public void executeMonthlyTask() {
        System.out.println("每月1号 执行此任务-任务描述： 当合同在执行中事后-修改 （开工运维周期，本年运维周期，未完成产值）！");
        // 在这里添加你的业务逻辑
        List<Contract> contract = ContractMapper.selectExecuteContractList();
        for (Contract c : contract) {
            System.out.println("合同编号：" + c.getContractCode());
            //满足合同类别是在线运维,污水运维的情况 新增合同时确定下来产值
            if(c.getContractType().equals("在线运维")||c.getContractType().equals("污水运维")) {//只修改这类的
                //设置开工运维周期
                c.setStartWorkContractPeriod(c.getStartWorkContractPeriod()+1);
                //本年运维周期 如果当前是12月份 则设置为0
                if(c.getStartWorkContractPeriod()==12){
                    c.setYearEndPeriod(0);
                }else{
                    c.setYearEndPeriod(c.getYearEndPeriod()+1);
                }

                //未完成产值
                // 将字符串转换为小数
                double unfinished = Double.parseDouble(c.getUnfinishedOutput());
                double monthOutput = Double.parseDouble(c.getMonthOutputValue());
                // 计算未完成值
                double result = unfinished - monthOutput;
                // 格式化结果，保留两位小数
                DecimalFormat decimalFormat = new DecimalFormat("#.00");
                String formattedResult = decimalFormat.format(result);
                c.setUnfinishedOutput(formattedResult);
                ContractMapper.editContractByCode(c);

            }else{
                System.out.println("合同类别：" + c.getContractType() + "的不修改");
            }
        }
    }
    @Scheduled(cron = "0 0 0 1 * ?")
    public void monthlyUpdateTask() {
        System.out.println("每月1号 执行此任务-任务描述： 当合同在执行中时候-修改 （属于BM,QT，JS）的合同 的月平均产值，年产值，并且如果当前时间是1月1日 那么记录去年年产值并且清零年产值 ！");
        // 在这里添加你的业务逻辑
        List<Contract> contract = ContractMapper.selectExecuteContractList();
        for (Contract c : contract) {
            if(c.getContractType().equals("在线建设")
                    ||c.getContractType().equals("污水建设")
                    ||c.getContractType().equals("宝马在线")
                    ||c.getContractType().equals("宝马污水")
                    ||c.getContractType().equals("其他")) {//只修改这类的
                //设置月平均产值
                c.setMonthOutputValue("0");
                ContractMapper.updateContractByCode(c);

            }else{
                System.out.println("合同类别：" + c.getContractType() + "的不修改");
            }
        }
    }
    // 在项目启动时立即执行
    @PostConstruct
    public void init() {
        //executeAnnualTask();  // 调用执行方法
        //executeMonthlyTask();  // 调用执行方法
        //monthlyUpdateTask();
    }
}